/*
refer: https://lyl0724.github.io/2020/01/25/1/

递归题的三部曲：

找整个递归的终止条件：递归应该在什么时候结束？
找返回值：应该给上一级返回什么信息？
本级递归应该做什么：在这一级递归中，应该完成什么任务？
*/

#include <iostream>

struct ListNode {
    int val;
    ListNode *next;
    ListNode() : val(0), next(nullptr) {}
    ListNode(int val) : val(val), next(nullptr) {}
    ListNode(int val, ListNode *next) : val(val), next(next) {}
};

ListNode* swapPairs(ListNode* head) {
    if (head == nullptr || head->next == nullptr) {
        return head;
    }

    // 上一级->head->next->已处理完的链表部分
    // 需要转化成：
    // 上一级->next->head->已处理完的链表部分

    ListNode* next = head->next;
    head->next = swapPairs(next->next); // next->next可以想像成将next后面的链表
    next->next = head;

    // 返回给上一级的是当前已经完成交换后，即处理好了的链表部分
    return next;
}

int main() {
    
    return 0;
}